
// 函数的参数


// 函数声明 (命名函数)
// function add(a: number, b: number): number {
//     return a + b;
// }

// add(1, 2, 3);  // 应有 2 个参数，但获得 3 个

//一般情况下,参数要求一一对应 => 输入多余的（或者少于要求的）参数，是不被允许的：



// 可选参数
// 需要注意的是，可选参数必须接在必需参数后面。换句话说，可选参数后面不允许再出现必需参数了：
// function callName(name: string, xing?: string): string {
//     if (xing) {
//         return xing + "" + name;
//     } else {
//         return name;
//     }
// }

// callName("三", "张");
// callName("四");


// 参数默认值
// TypeScript 会将添加了默认值的参数识别为可选参数,此时就不受「可选参数必须接在必需参数后面」的限制了：

// function add(a: number = 0, b: number = 0): number {
//     return a + b;
// }

// add()

// 剩余参数   
// 注意，rest 参数只能是最后一个参数，关于 rest 参数

//  ...list  =>  2,8,4,6    推出: list = [2,8,4,6]  扩展运算符的反向用法(Rest)
/* function add(...list: number[]): number {
    return list.length;
}

add(2, 8, 4, 6); */

/* function add(arr: number[], ...list: number[]): number[] {
    for (var i = 0; i < list.length; i++) {
        arr.push(list[i]);
    }
    return arr;
}

add([], 2, 8, 4, 6); */



// 重载
// 参数和返回值的对应关系


// 重载允许一个函数接受不同数量或类型的参数时，作出不同的处理。

// 比如，我们需要实现一个函数 reverse，输入数字 123 的时候，输出反转的数字 321，输入字符串 'hello' 的时候，输出反转的字符串 'olleh'。

/* function reverse(arg: number | string): number | string {
    if (typeof arg == "number") {
        return Number(String(arg).split("").reverse().join(""));
    } else {
        return arg.split("").reverse().join("");
    }
} */

function reverse(arg: number): number;
function reverse(arg: string): string;
function reverse(arg: number | string) {
    if (typeof arg == "number") {
        return Number(String(arg).split("").reverse().join(""));
    } else {
        return arg.split("").reverse().join("");
    }
}









export default 100;